#ifndef PREFERENCE_H_INCLUDED
#define PREFERENCE_H_INCLUDED

/*!
 * \file Preference.h
 * \brief Déclaration des méthodes sur les préférences
 * \author LY Julie (Responsable)
 * \version 1.0
 * \date 22 février 2013
*/

#include <vector>
#include <string>


/*!
 * \class Preference
 * \brief Classe sur les préférences.
*/ 
class Preference
{
	private :
		std::string mostPreferred ; /*!< La préférence la plus préférée*/
		std::string lessPreferred ; /*!< La préférence la moins préférée*/
		std::string condition ; /*!< Une condition de préférence*/
		std::string semantic ; /*!< La sémantique de la préférence*/

	public :
	
		/*!
		 * \fn Preference()
		 * \brief Constructeur par défaut d'une Preference.
		 * \return Renvoie une Preference par défaut.
		 */	
		Preference() ;
	
		/*!
		 * \fn Preference( string preference1, string preference2 )
		 * \brief Constructeur paramétré d'une Preference.
		 * \param preference1 la préférence la plus préférée.
		 * \param preference2 la préférence la moins préférée.
		 * \return Renvoie une Preference paramétré par deux préférences.
		 */	
		Preference( std::string preference1, std::string preference2 ) ;

		/*!
		 * \fn Preference( string preference1, string preference2, string condition )
		 * \brief Constructeur paramétré d'une Preference conditionelle.
		 * \param preference1 la préférence la plus préférée.
		 * \param preference2 la préférence la moins préférée.
		 * \param condition la condition.
		 * \return Renvoie une Preference paramétré par deux préférences et une condition.
		 */	
		Preference( std::string preference1, std::string preference2, std::string condition ) ;
	
		/*!
		 * \fn virtual ~Preference()
		 * \brief Destructeur de Preference.
		 * \return Ne renvoie rien.
		 */	
		virtual ~Preference() ;
	
		/*!
		 * \fn virtual string getSemantic() const
		 * \brief Permet d'obtenir le nom de la sémantique.
		 * \return Renvoie le nom de la sémantique.
		 */	
		virtual std::string getSemantic() const ;

	
		/*!
		 * \fn virtual void setSemantic( Semantic semantic )
		 * \brief Permet de changer la sémantique du Jeu de Preference.
		 * \param semantic le nom de la nouvelle sémantique.
		 * \return Ne renvoie rien.
		 */	
		virtual void setSemantic( std::string semantic ) ;

		/*!
		 * \fn virtual string getMostPreferred() const
		 * \brief Permet d'obtenir la préférence la plus préférée.
		 * \return Renvoie la préférence la plus préférée.
		 */	
		virtual std::string getMostPreferred() const ;
	
		/*!
		 * \fn virtual string getLessPreferred() const
		 * \brief Permet d'obtenir la préférence la moins préférée.
		 * \return Renvoie la préférence la moins préférée.
		 */	
		virtual std::string getLessPreferred() const ;

		/*!
		 * \fn virtual string getCondition() const
		 * \brief Permet d'obtenir le nom de la condition.
		 * \return Renvoie le nom de la condition.
		 */	
		virtual std::string getCondition() const ;
	
		/*!
		 * \fn virtual void setMostPreferred( string preference )
		 * \brief Permet de changer la préférence la plus préférée.
		 * \param preference une nouvelle préférence la plus préférée.
		 * \return Ne renvoie rien.
		 */	
		virtual void setMostPreferred( std::string preference ) ;
	
		/*!
		 * \fn virtual void setLessPreferred( string preference )
		 * \brief Permet de changer la préférence la moins préférée.
		 * \param preference une nouvelle préférence la moins préférée.
		 * \return Ne renvoie rien.
		 */	
		virtual void setLessPreferred( std::string preference ) ;


	
		/*!
		 * \fn virtual void setAllPreferences( string preference1, string preference2 )
		 * \brief Permet de changer la préférence la plus préférée ainsi que celle la moins préférée.
		 * \param preference1 une nouvelle préférence la plus préférée.
		 * \param preference2 une nouvelle préférence la moins préférée.
		 * \return Ne renvoie rien.
		 */	
		virtual void setAllPreferences( std::string preference1, std::string preference2 ) ;

		/*!
		 * \fn virtual void setAllPreferences( string preference1, string preference2, string condition )
		 * \brief Permet de changer la préférence la plus préférée, la moins préférée et la condition.
		 * \param preference1 une nouvelle préférence la plus préférée.
		 * \param preference2 une nouvelle préférence la moins préférée.
		 * \param condition une nouvelle condition.
		 * \return Ne renvoie rien.
		 */	
		virtual void setAllPreferences( std::string preference1, std::string preference2, std::string condition ) ;
	
		/*!
		 * \fn virtual void show() const
		 * \brief Permet d'afficher la Preference.
		 * \return Ne renvoie rien.
		 */	
		virtual void show() const ;

};


#endif



